﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Arkanoid
{
    class Bola
    {
        Texture2D Textura;
        Rectangle TamanhoFiguraBola, TamanhoFiguraBarra;
        Vector2 BolaTamanho;
        Vector2 Posicao;
        public Vector2 posicao
        {
            get
            {
                return Posicao;
            }
            set
            {
                Posicao = value;
            }
        }
        GameWindow AtributosJanela;
        int InicioJogo = 0;
        int Velocidade = 0; //Verificar
        int BolaDirecaoX = 3, BolaDirecaoY = 3;
        Random DirecaoInicial = new Random();
        SoundEffect soundEffect;
        BoundingBox Barra, CBola;
        SpriteFont TScore;
        int Pontuacao1 = 0, Pontuacao2 = 0;

        public void LoadContent(Texture2D Textura, Vector2 PosicaoInicial, Vector2 BolaTamanho, Texture2D TBarra, SpriteFont TScore)
        {
            this.Textura = Textura;
            TamanhoFiguraBola = Textura.Bounds;
            this.BolaTamanho = BolaTamanho;

            //Posicao Inicial da Bola
            Posicao = PosicaoInicial;

            TamanhoFiguraBarra = TBarra.Bounds;
            this.TScore = TScore;
        }

        public void Update(GameWindow AtributosJanela, GameTime gameTime, SoundEffect soundEffect, Vector2 PosicaoBarra)
        {

            this.AtributosJanela = AtributosJanela;
            Barra = new BoundingBox(new Vector3((int)PosicaoBarra.X, (int)PosicaoBarra.Y, 0), new Vector3((int)PosicaoBarra.X + (int)TamanhoFiguraBarra.Width, (int)PosicaoBarra.Y + (int)TamanhoFiguraBarra.Height, 0));

            #region Direção Inicial da Bola
            while (InicioJogo == 0)
            {
                if (InicioJogo == 0)
                {
                    InicioJogo = DirecaoInicial.Next(-1, 2);

                    if (InicioJogo == -1)
                    {
                        Velocidade = -1;
                    }
                    else
                    {
                        Velocidade = 1;
                    }
                }
            }
            #endregion

            #region Direção dos Lados da Bola
            Posicao.X += Velocidade * BolaDirecaoX;
            Posicao.Y += Velocidade * BolaDirecaoY;

            if (Posicao.X <= 0)
            {
                BolaDirecaoX *= -1;
                Pontuacao2++;
                soundEffect.Play();
            }

            if (Posicao.X + BolaTamanho.X >= AtributosJanela.ClientBounds.Width)
            {
                BolaDirecaoX *= -1;
                Pontuacao1++;
                soundEffect.Play();
            }

            if (Posicao.Y + BolaTamanho.Y >= AtributosJanela.ClientBounds.Height)
            {
                BolaDirecaoY *= -1;
                soundEffect.Play();
            }

            if (Posicao.Y <= 0)
            {
                BolaDirecaoY *= -1;
                soundEffect.Play();
            }
            #endregion

            #region Colisão Entre a Barra e a Bola

            CBola = new BoundingBox(new Vector3((int)Posicao.X, (int)Posicao.Y, 0), new Vector3((int)Posicao.X + (int)TamanhoFiguraBola.Width, (int)Posicao.Y + (int)TamanhoFiguraBola.Height, 0));

            if (CBola.Intersects(Barra))
            {
                BolaDirecaoY *= -1;
            }

            #endregion
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(Textura, Posicao, Color.White);
        }

        public void SpriteDraw(SpriteBatch spriteBatch, Vector2 PPlacar, int Player)
        {
            if (Player == 1)
            {
                spriteBatch.DrawString(TScore, "GOL: " + Pontuacao1, PPlacar, Color.Black);
            }

            if (Player == 2)
            {
                spriteBatch.DrawString(TScore, "GOL: " + Pontuacao2, PPlacar, Color.Black);
            }
        }
    }
}
